
對於跨平臺GUI的開發選擇,你不會完全像我這次一樣,選擇JavaFX做為主要框架。我在開始這次的深度學習前,也再做過一次了解:目前跨平臺視窗應用程式有哪些選項。你可以參考我所了解的,再對於自己的需求進一步選擇。
如果你是想先快速判斷「我該選哪個框架」,可以先看你的開發語言與部署平台:
簡單說:
也就是說,若你有 Web 開發經驗,Tauri / Electron 很可能是最自然的入口;若你想做的是終端工具,應尋找TUI 或CLI的工具設計相關框架。
參考本文,依照自己的背景經驗與需求選擇框架。並在真正確認使用前,先做兩個最小驗證:
然後判斷是否符合你之後的維護與擴展需求。如果一個框架可以讓你在最短時間內完成第一個原型,通常比它的「名氣」更重要。
那麼首先先分享我有經驗的框架:
我自己是熟悉Python的,所以首先對於真的真的臨時有GUI使用需求,會先想到CPython就帶著的Tkinter。
import tkinter as tk
root = tk.Tk()
message = tk.Label(root, text="Hello, World!")
message.pack()
root.mainloop()
其實Tcl/Tk使用起來幾乎一模一樣,畢竟Tkinter就是基於Tcl/Tk的,不過因為Tcl命令式語言的設計,甚至會比Tkinter看起來更簡單一點。但對於複雜場景我自己是不太習慣只使用命令式設計。
label .hello -text "Hello World"
pack .hello
另外印象中中文會出現亂碼,需要額外的處理工作。(這次在我Linux環境使用Tkinter的簡單測試並沒有遇到)
Qt是出名的開源/商業雙授權的跨平臺GUI框架,甚至對於iOS/Android等行動裝置也有支援。
有Qt Creator這個可視化設計工具(沒想到可以在瀏覽器直接使用了)。記得甚至可以直接生成PySide程式碼(不需要再進行一次UI文件的載入與綁定)。我的使用經驗就是在用Keycloak學習身份驗證與授權32中學習Device Code Flow這個OAuth 2.0流程。
一些我知道使用Qt開發的軟體,我的使用體驗都很好。Qt是使用C++開發的,C++天然可以使用,並且官方支援Python的橋接,對於官方支援這件事在「穩定」和「順心」很重要,有過一些不是第一梯隊官方支援的語言,除了要做的事情多很多外,坑也踩了不少。目前看來C#和Rust的橋接也在Beta版,對於C#和Rust且本已經熟悉Qt的開發者,Qt完全可以是個選項。雖然C#和Rust生態有其他名聲更亮的框架,但對於那些後起之秀,Qt已經證明了自己的穩定,也有累計一定的生態與工具。此外甚至可以購買商業支援。
kivy-calculator是使用Kivy開發的行動裝置APP。Kivy是Python生態跨平臺、跨裝置的GUI框架。使用起來使簡單的,若沒有特殊需求,甚至可以忽略tkinter直接先嘗試Kivy使用。
不過對於行動裝置APP的打包和Android系務功能的交互,當初遇到不少麻煩。但有很大可能是因為我不熟悉Android APP開發生態,儘管當時也有Android Studio的使用經驗,可是其中有太多細節不清楚,以至於Kivy遇上的麻煩得花很多力氣解決。
GTK是Linux生態很常使用到的GUI框架,本身是使用C語言寫的,也因此有相當多的語言橋接綁定,包含C++、Python、Java、Go、Rust、JavaScript。有Glade可以用於可視化的界面設計工具。
不過因為Windows的ABI使用慣例與Linux不同,在Windows上的開發和使用體驗略略差。但近期使用MSYS2的體驗,在不用到WSL或其他虛擬機技術的情況下感受好很多。(MSYS2不是用於GTK應用的開發,單純我對於Windows上體驗類似Linux經驗的感受)
很多JavaScript/TypeScript的開發者,應該對於開發桌面應用程式首選會是Electron.JS吧! Atom Editor帶紅的JavaScript開發桌面應用程式,更促成微軟的VSCode。
但很容易就把打包後的檔案肥大外(畢竟塞了一個瀏覽器),使用起來也有可能很吃記憶體。但對於前端開發人員無疑是遷移最小的方式。
(Atom Editor的後繼者: Pulsar Editor)
Snake-Game(試玩)
是使用Godot開發的一個跨平台、跨裝置,甚至可以直接在瀏覽器上直接遊玩的貪吃蛇遊戲。它明明定位是作為一個「遊戲引擎」,為什麼會在「跨平台GUI框架」比較中提到呢?是因為看到有人使用Godot開發Lorien-一個無線畫布的白板工具。遊戲引擎包含圖形互動介面設計,可想當然可以作為工具開發使用,不知道沒有沒人用Unreal、Unity做類似的事情。另外Lua也有Love2D遊戲引擎可以使用。
視窗開發工具當然也可以做遊戲。我也用過VB6做過一些小遊戲。
wxWidget是使用C++開發,但有多語言的橋接實現,包含wxPython、wxLua、wxdragon(Rust)。
wxWidget最大的特色是使用原生級別的GUI框架,像是在多數Linux環境使用wxGTK,Windows使用wxWSM、OSX使用Cocoa(Platform Detail)。不過其實還有wxQt,所以與其說是GUI框架,更像是強大的翻譯官,橋接轉譯各個框架與開發人員的溝通。
我自己有在使用的知名應用有:Filezilla、FreeFileSync。

後面條例的是目前我沒用過,但網路上很容易找到的選擇:
----- 基於WebView的-----
大學時期使用過ncurses,且雖然我本身也經常使用CLI工具,但還真沒有想過AI時代會迎來TUI的文藝復興。我是在Claude Code源碼泄漏事件後,留意到React Ink的。也因爲ncurses的經驗很難突破想象可以這麼現代化、簡易的開發TUI工具。並且近期也在了解Wezterm、Ghostty。
現代化的TUI,有很多不只是基於傳統Terminal,更需要新一代Terminal支援。比如顯示圖片需要Terminal應用支援iTerm2的Inline Images Protocol。看訪談Ghostty希望提供更多現代化的能力。
至於我自己比較熟悉的Python也有Textual套件可用。另外因為AI代理(AI Agent),CLI工具也迎來新一波流行,除了我曾經留意過的Click,Typer看起來開發也簡化不少。
這 16 個框架跨越了從 1980 年代至今的技術演進,其底層邏輯可分為四大派系:原生控制項派(調用 OS 元件)、自渲染派(用 GPU 畫出 UI)、Web 技術包裝派(用瀏覽器核心渲染)以及遊戲引擎延伸派。
以下將針對您指定的 16 個框架進行核心特性的橫向對比,並提供深度的詳細分析。
| 框架名稱 | 主要渲染技術 | 主要/綁定語言 | 授權模式 | 價格 | 性能與體積 | 行動裝置支援度 |
|---|---|---|---|---|---|---|
| GTK | 獨立渲染 (Cairo/Gsk) | C (綁定 Python/Rust) | LGPL-2.1+ | 免費開源 | 🚀 優秀 / 中等 | ⚠️ 僅限 Linux 手機 |
| Qt | 獨立與硬體加速渲染 | C++ (綁定 Python) | GPL/LGPL/商業 | 免費 / 商業收費 | 🚀 極佳 / 偏大 | ✅ 完美支援 |
| TK | 原生與自繪結合 | Tcl (綁定 Python) | BSD-style | 免費開源 | 📉 較差 / 極小 | ❌ 不支援 |
| wxWidgets | 純原生系統控制項 | C++ (綁定 Python) | wxWindows (類LGPL) | 免費開源 | 🚀 優秀 / 較小 | ⚠️ 實驗性支援 |
| Flutter | GPU 獨立渲染 (Impeller) | Dart | BSD-3-Clause | 免費開源 | 🚀 極佳 / 中等 | ✅ 完美支援 (主力) |
| Avalonia | GPU 獨立渲染 (Skia) | C# (.NET生態) | MIT | 免費開源 | 🚀 優秀 / 中等 | ✅ 完整支援 |
| Electron | Chromium + Node.js | JS / TS | MIT | 免費開源 | 🐌 較差 / 巨大 | ❌ 不支援 |
| GPUI | GPU 高效渲染 (Metal/Vulkan) | Rust | Apache-2.0 / MIT | 免費開源 | ⚡ 極致 / 較小 | ❌ 僅限桌面端 |
| JavaFX | 獨立硬體加速 (Prism) | Java | GPL v2 + Classpath | 免費開源 | 🏎️ 良好 / 偏大 | ⚠️ 需透過 Gluon |
| capy | 原生系統控制項 | Zig (支援 C API) | MPL-2.0 | 免費開源 | ⚡ 極致 / 極小 | 🛠️ 開發中 (WIP) |
| Tauri | 系統原生 WebView + Rust | Rust / JS / TS | MIT / Apache-2.0 | 免費開源 | 🚀 優秀 / 極小 | ✅ 完整支援 (v2.0+) |
| NW.js | Chromium + Node.js | JS / TS | MIT | 免費開源 | 🐌 較差 / 巨大 | ❌ 不支援 |
| Sciter | 自研輕量 HTML/CSS 引擎 | C++ / HTML / TIScript | 專有授權 | 免費版 / 商業收費 | 🚀 優秀 / 極小 | ✅ 完整支援 |
| NeutralinoJS | 系統原生 WebView + C++ | JS / TS / C++ | MIT | 免費開源 | 🚀 優秀 / 極小 | ❌ 不支援 |
| Godot | 遊戲引擎渲染 (Vulkan/GLES) | GDScript / C# / C++ | MIT | 免費開源 | 🚀 極佳 / 偏大 | ✅ 完美支援 |
| love2d | 2D 遊戲引擎渲染 (OpenGL) | Lua | Zlib | 免費開源 | 🚀 優秀 / 較小 | ✅ 完整支援 |
| 比較維度 | Python Textual | Node.js React Ink | Go Bubbletea (Charm) | Rust Ratatouille | C/C++ ncurses |
|---|---|---|---|---|---|
| 主要語言 | Python 3.8+ | JavaScript / TypeScript | Go | Rust | C / C++ |
| 架構範式 | 響應式 / 類 Web (CSS + Async) | 宣告式 (React JSX / Flexbox) | Elm 架構 (Model-Update-View) | 立即模式 (Immediate Mode UI) | 傳統指令式 (Procedural) |
| 排版與樣式 | 支援專屬 TCSS (類 CSS) | 支援 Yoga (CSS Flexbox 引擎) | 透過 Lipgloss 進行鏈式樣式設定 | 程式碼計算 Rect / Constraint | 手動計算 X/Y 座標與字元邊界 |
| 滑鼠與事件 | 完整支援 (點擊、滾輪、拖拉) | 基礎支援 | 完整支援 | 完整支援 | 有限支援 |
| 學習曲線 | 低 (熟悉 Python/CSS 極快) | 低 (熟悉 React 幾乎零門檻) | 中 (需適應 Functional/Elm 狀態流) | 高 (需應對 Rust 所有權與版面計算) | 極高 (記憶體與座標管理繁瑣) |
| 典型用途 | 複雜資料儀表板、內部工具、DevOps | CLI 安裝工具、腳本狀態顯示 | 質感極佳的輕量 CLI/TUI 工具 | 高效能系統監控 (如 btop 類工具) | 嵌入式 Linux、傳統系統基礎建設 |
Python Textual
Node.js React Ink
<Box>, <Text>)直接寫成 JSX。底層整合 Facebook 的 Yoga 引擎,支援完整的 Flexbox 佈局。Go Bubbletea (Charm生態)
Init, Update, View),狀態流向極度清晰。配合同家的 Lipgloss 樣式庫與 Bubbles 組件庫,視覺質感極高。Rust Ratatouille (前身為 tui-rs)
gping)。編譯後的單一執行檔體積小、效能強悍。Layout::default().constraints(...) 切割區塊,代碼量較大。補充一個今天看到的YouTube影片:没有 Qt,就没有 KDE。反过来也一样
影片介紹了Qt開源部分的相關歷史,以及與開源社區生態的爭議。
原來Qt已經轉手過兩次,我自己一開始有印象的是Nokia擁有Qt,但回想之前使用PySide6的開發,可能早已經再轉手了......畢竟我都申辦了Qt帳號......。怪不得那次使用經驗和我原本印象的不太一樣,有點小麻煩。